package com.zliblike_platform.service;

import com.zliblike_platform.dto.BookListDTO;
import com.zliblike_platform.dto.BookListItemDTO;
import com.zliblike_platform.vo.BookListItemVO;
import com.zliblike_platform.vo.BookListVO;
import com.zliblike_platform.vo.PageResult;

import java.util.List;

/**
 * 书单服务接口
 */
public interface BookListService {
    
    /**
     * 创建书单
     * @param userId 用户ID
     * @param bookListDTO 书单信息
     * @return 书单ID
     */
    Long createBookList(Long userId, BookListDTO bookListDTO);
    
    /**
     * 更新书单信息
     * @param userId 用户ID
     * @param listId 书单ID
     * @param bookListDTO 书单信息
     * @return 是否更新成功
     */
    boolean updateBookList(Long userId, Long listId, BookListDTO bookListDTO);
    
    /**
     * 获取书单详情
     * @param listId 书单ID
     * @param userId 当前用户ID（用于判断是否可编辑）
     * @return 书单详情
     */
    BookListVO getBookListDetail(Long listId, Long userId);
    
    /**
     * 获取书单中的书籍列表
     * @param listId 书单ID
     * @return 书籍列表
     */
    List<BookListItemVO> getBookListItems(Long listId);
    
    /**
     * 添加书籍到书单
     * @param userId 用户ID
     * @param listId 书单ID
     * @param itemDTO 书籍信息
     * @return 条目ID
     */
    Long addBookToList(Long userId, Long listId, BookListItemDTO itemDTO);
    
    /**
     * 从书单中移除书籍
     * @param userId 用户ID
     * @param listId 书单ID
     * @param itemId 条目ID
     * @return 是否移除成功
     */
    boolean removeBookFromList(Long userId, Long listId, Long itemId);
    
    /**
     * 更新书单中的书籍备注
     * @param userId 用户ID
     * @param listId 书单ID
     * @param itemId 条目ID
     * @param note 新备注
     * @return 是否更新成功
     */
    boolean updateBookNote(Long userId, Long listId, Long itemId, String note);
    
    /**
     * 获取公开书单列表（分页）
     * @param page 页码
     * @param size 每页数量
     * @return 分页结果
     */
    PageResult<BookListVO> getPublicBookLists(Integer page, Integer size);
    
    /**
     * 获取用户的书单列表（分页）
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页数量
     * @return 分页结果
     */
    PageResult<BookListVO> getUserBookLists(Long userId, Integer page, Integer size);
    
    /**
     * 删除书单
     * @param userId 用户ID
     * @param listId 书单ID
     * @return 是否删除成功
     */
    boolean deleteBookList(Long userId, Long listId);
    
    /**
     * 收藏书单
     * @param userId 用户ID
     * @param listId 书单ID
     * @return 操作结果
     */
    boolean favoriteBookList(Integer userId, Integer listId);
    
    /**
     * 取消收藏书单
     * @param userId 用户ID
     * @param listId 书单ID
     * @return 操作结果
     */
    boolean unfavoriteBookList(Integer userId, Integer listId);
    
    /**
     * 检查用户是否收藏了书单
     * @param userId 用户ID
     * @param listId 书单ID
     * @return 是否收藏
     */
    boolean isBookListFavorited(Integer userId, Integer listId);
    
    /**
     * 获取书单的收藏数
     * @param listId 书单ID
     * @return 收藏数
     */
    int getBookListFavoriteCount(Integer listId);
    
    /**
     * 获取用户收藏的书单
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页大小
     * @return 书单列表
     */
    List<BookListVO> getUserFavoriteBookLists(Integer userId, int page, int size);
} 